home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Lib / Widgets / MenuWidget.py < prev    next >
Encoding:
Python Source  |  2000-11-16  |  33.6 KB  |  1,211 lines

  1.  
  2.  
  3. import BUIx
  4. import Bladex
  5. import Raster
  6. import ScorerWidgets
  7. import WidgetsExtra
  8. import SpinWidget
  9. import TextFXWidget
  10. import pdb
  11. #import Bldb
  12. import BInput
  13. #import IDebug
  14. import BBLib
  15. import MenuText
  16. import sys
  17.  
  18.  
  19. import netgame
  20.  
  21. #if netgame.GetNetState()==0:
  22. #  import Scorer
  23.  
  24. class Stack:
  25.   def __init__(self):
  26.     #print "Stack.__init__()"
  27.     self.Items=[]
  28.  
  29.   def __del__(self):
  30.     #print "Stack.__del__()"
  31.     pass
  32.  
  33.   def nItems(self):
  34.     return len(self.Items)
  35.  
  36.   def Push(self,item):
  37.     self.Items.append(item)
  38.  
  39.   def Pop(self):
  40.     self.Items=self.Items[:-1]
  41.  
  42.   def Top(self):
  43.     try:
  44.       return self.Items[-1]
  45.     except:
  46.       return None
  47.  
  48.   def Reset(self):
  49.     self.Items=[]
  50.  
  51.  
  52.  
  53.  
  54. class MenuStack(Stack):
  55.   def __init__(self,final_callback):
  56.     Stack.__init__(self)
  57.     self.FinalCallBack=final_callback
  58.  
  59.   def Push(self,menu_item):
  60.     #print "MenuStack Pushing",menu_item,"with refcount",sys.getrefcount(menu_item)
  61.     s=self.Top()
  62.     if not s:
  63.       Bladex.SetAppMode("Menu")
  64.     Bladex.SetRootWidget(menu_item.GetPointer())
  65.     Stack.Push(self,menu_item)
  66.     #print "RefCount (pushed)",sys.getrefcount(menu_item)
  67.  
  68.   def Pop(self):
  69.     #print "MenuStack.Popping",self.Top(),"with refcount",sys.getrefcount(self.Top())
  70.     Stack.Pop(self)
  71.     s=self.Top()
  72.     if s:
  73.       Bladex.SetRootWidget(s.GetPointer())
  74.     else:
  75.       #print "Final CallBack"
  76.       self.FinalCallBack()
  77.  
  78.  
  79.  
  80. class B_MenuFocusManager:
  81.   def __init__(self):
  82.     #print "B_MenuFocusManager.__init__()"
  83.     self.MenuItems=[]
  84.     self.Focus=None # Voy a llevar el foco aquφ en vez de dejarselo al C.
  85.  
  86.   def __del__(self):
  87.     #print "B_MenuFocusManager.__del__()"
  88.     self.Focus=None
  89.     self.MenuItems=[]
  90.  
  91.   def AddMenuElement(self,menu_element):
  92.     #print "B_MenuFocusManager.AddMenuElement()  (init)->",menu_element, sys.getrefcount(self)
  93.     self.MenuItems.append(menu_element)
  94.     self.Focus=menu_element
  95.     #print "B_MenuFocusManager.AddMenuElement()  (end)->", sys.getrefcount(self)
  96.  
  97.  
  98.   def GetFocus(self):
  99.     return self.Focus
  100.  
  101.  
  102.   def SetFocus(self,menu_element):
  103.     accepts_focus=0
  104.     try:
  105.       accepts_focus=menu_element.AcceptsFocus()
  106.     except:
  107.       pass
  108.  
  109.     if accepts_focus==1:
  110.       old_foc=self.GetFocus()
  111.       if menu_element==old_foc:
  112.         return 1
  113.       if old_foc:
  114.           old_foc.SetHasFocus(0)
  115.       menu_element.SetHasFocus(1)
  116.       self.Focus=menu_element
  117.       return 1
  118.  
  119.     return 0
  120.  
  121.  
  122.  
  123.   def SetFocus_Idx(self,menu_element_idx):
  124.     try:
  125.       menu_element=self.MenuItems[menu_element_idx]
  126.       self.SetFocus(menu_element)
  127.     except:
  128.       print "Error setting focus to index",menu_element_idx
  129.  
  130.  
  131.  
  132.   def NextFocus(self):
  133.     try:
  134.       old_focus=self.GetFocus()
  135.       index=self.MenuItems.index(old_focus)
  136.       list=self.MenuItems[index+1:]+self.MenuItems[:index]
  137.       for i in list:
  138.         if self.SetFocus(i):
  139.           try:
  140.               i.FocusCallBack(i)
  141.           except AttributeError:
  142.               pass
  143.           return
  144.     except:
  145.       print "B_MenuFocusManager::NextFocus() -> Exception ocurred."
  146.       pass
  147.  
  148.  
  149.  
  150.   def PrevFocus(self):
  151.     try:
  152.       old_focus=self.GetFocus()
  153.       index=self.MenuItems.index(old_focus)
  154.  
  155.       l1=self.MenuItems[:index]
  156.       l2=self.MenuItems[index+1:]
  157.       l1.reverse()
  158.       l2.reverse()
  159.       list=l1+l2
  160.  
  161.       for i in list:
  162.         if self.SetFocus(i):
  163.           try:
  164.               i.FocusCallBack(i)
  165.           except AttributeError:
  166.               pass
  167.           return
  168.  
  169.     except:
  170.       print "B_MenuFocusManager::PrevFocus() -> Exception ocurred."
  171.       pass
  172.  
  173.   def FinalRelease(self):
  174. ##    print "B_MenuFocusManager.FinalRelease()"
  175.     for i in self.MenuItems:
  176.       try:
  177.         i.FinalRelease()
  178.       except:
  179.         pass
  180.  
  181.  
  182.  
  183.  
  184. class B_MenuFrameWidget(B_MenuFocusManager,BUIx.B_FrameWidget):
  185.   def __init__(self,Parent,Name,Width,Height,VertPos=0):
  186.     #pdb.set_trace()
  187.     #print "B_MenuFrameWidget.__init__()"
  188.     BUIx.B_FrameWidget.__init__(self,Parent,Name,Width,Height)
  189.     B_MenuFocusManager.__init__(self)
  190.     self.VertPos=VertPos
  191.     self.thisown=1
  192.     self.SetAutoScale(1)
  193.     #print "B_MenuFrameWidget.__init__() End",Name,Width,Height
  194.  
  195.   def __del__(self):
  196.     #print "B_MenuFrameWidget.__del__()",self.Name()
  197.     for i in self.MenuItems:
  198.       #print "Deletting SetDrawFunc() of",i
  199.       i.SetDrawFunc(None)
  200.  
  201.     B_MenuFocusManager.__del__(self)
  202.     BUIx.B_FrameWidget.__del__(self)
  203.  
  204.  
  205. #  def __str__(self):
  206. #    print "class B_MenuFrameWidget ",self.Name()
  207.  
  208.  
  209.   def AddMenuElement(self,menu_element,sep=0,
  210.                      HPos=0.5,HIndicator=BUIx.B_FrameWidget.B_FR_HRelative,HAnchor=BUIx.B_FrameWidget.B_FR_HCenter):
  211.     B_MenuFocusManager.AddMenuElement(self,menu_element)
  212.  
  213.     self.AddWidget(menu_element,HPos,self.VertPos+sep,
  214.                    HIndicator,HAnchor,
  215.                    BUIx.B_FrameWidget.B_FR_AbsoluteTop,BUIx.B_FrameWidget.B_FR_Top)
  216.  
  217.     self.VertPos=self.VertPos+menu_element.GetSize()[1]+sep
  218.     #print self.VertPos
  219.     self.SetFocus(menu_element.Name())
  220.     #print "B_MenuFrameWidget.AddMenuElement()  (end)->", sys.getrefcount(self)
  221.  
  222.  
  223.   def AddMenuElementEx(self,menu_element,VPos=0,HPos=0.5,
  224.                        HIndicator=BUIx.B_FrameWidget.B_FR_HRelative,HAnchor=BUIx.B_FrameWidget.B_FR_HCenter):
  225.     B_MenuFocusManager.AddMenuElement(self,menu_element)
  226.  
  227.     self.AddWidget(menu_element,HPos,self.VertPos+sep,
  228.                    HIndicator,HAnchor,
  229.                    BUIx.B_FrameWidget.B_FR_AbsoluteTop,BUIx.B_FrameWidget.B_FR_Top)
  230.  
  231.     self.VertPos=self.VertPos+menu_element.GetSize()[1]+sep
  232.     #print self.VertPos
  233.     self.SetFocus(menu_element.Name())
  234.     #print "B_MenuFrameWidget.AddMenuElement()  (end)->", sys.getrefcount(self)
  235.  
  236.  
  237.  
  238. # MenuDescr es un diccionario con los siguientes campos para describir el men·:
  239. # "Name",            Nombre del men·.
  240. # "Kind",            Clase de elemento, es una clase. Si no existe se usa B_MenuItemText.
  241. # "FrameKind",       Clase del marco del elemento, es una clase. Si no existe se usa B_MenuTree.
  242. # "ListDescr",       Lista de MenuDesc, puede no existir.
  243. # "Command",         Si ListDscr estß vacφa o no existe, trata de ejecutar este.
  244. # "VSep",            Separaci≤n con el elemento anterior, si es el primero es el margen vertical.
  245. # "Font",            Fuente para el elemento.
  246. # "Options",         Lista de opciones para un elemento de tipo B_MenuItemOption.
  247. # "SelOptionFunc",   Llama a esta funci≤n para saber la opci≤n seleccionada para un elemento
  248. #                    de tipo B_MenuItemOption. Tiene que devolver una de las opciones de Options.
  249. #                    Si no existe esta funci≤n, toma la primera.
  250. # "Actions",         Lista para las acciones que se pueden definir en la pßgina de teclado.
  251. # "Position",        Lista que indica c≤mo colocar los men·s.
  252. # "PositionEx",      Lista que indica c≤mo colocar los men·s, ampliaci≤n.
  253. # "Size",            Lista con el ancho y el alto.
  254. # "BackGround",      Imagen de fondo.
  255. # "PageDscrs",       Lista de Descripci≤n de pßginas.
  256. # "PageDscr",        Descripci≤n de pßginas, es una diccionario con los siguientes campos:
  257. #                    "PrevLabel",   Etiqueta a la pßgina anterior.
  258. #                    "NextLabel",   Etiqueta a la pßgina siguiente.
  259. #                    "Title",       Tφtulo de la pßgina. (Obligatorio).
  260. # "SpinValues",      Tupla con tres valores para configurar un SpinWidget: inferior, superior, pasos.
  261. # "SpinGetValue"     Funci≤n que le dice al SpinWidget c≤mo obtener su valor inicial.
  262. # "SpinSetValueEnd"  Funci≤n que llama un SpinWidget al salir de contexto.
  263. # "SpinOnChange"     Funci≤n que llama un SpinWidget al cambiarse el valor
  264.  
  265. class B_MenuTreeItem:
  266.   def __init__(self,MenuDescr,StackMenu):
  267.     #print "MenuTreeItem.__init__()"
  268.     self.SetAlpha(0.5)
  269.     self.StackMenu=StackMenu
  270.     self.MenuDescr=MenuDescr
  271.     try:
  272.         self.FocusCallBack = MenuDescr["FocusCallBack"]
  273.     except:
  274.         pass
  275.  
  276.   def __del__(self):
  277.     #print "MenuTreeItem.__del__()"
  278.     pass
  279.  
  280.   def __str__(self):
  281.     print "B_MenuTreeItem widget with descriptor",self.MenuDescr
  282.  
  283.   def ActivateItem(self,activate):
  284.     if activate==1:
  285.       NewFrame=self.CreateFrame()
  286.       if NewFrame:
  287.         self.StackMenu.Push(NewFrame)
  288.         return 1
  289.       else:
  290.         try:
  291.           command=self.MenuDescr["Command"]
  292.           command(self)
  293.           return 1
  294.         except:
  295.           return 0
  296.     elif activate==0:
  297.       w=self.StackMenu.Top()
  298.       try:
  299.         w.FinalRelease()
  300.       except:
  301.         pass
  302.       self.StackMenu.Pop()
  303.       #del(w)
  304.  
  305.  
  306.   def CreateFrame(self):
  307.     #print "CreateFrame()"
  308.     frame_class=None
  309.  
  310.     try:
  311.       frame_class=self.MenuDescr["FrameKind"]
  312.     except KeyError:
  313.       # B_MenuTree Necesita MenuDescr["ListDescr"], con esto me aseguro que lo tenga y si no, no pasa nada
  314.       frame_class=B_MenuTree
  315.       l_dscr=[]
  316.       try:
  317.         l_dscr=self.MenuDescr["ListDescr"]
  318.       except KeyError:
  319.         pass
  320.       if l_dscr==[]:
  321.         print "l_dscr==[]"
  322.         return None
  323.     try:
  324.       NewFrame=frame_class(self,self.MenuDescr,self.StackMenu)
  325.       return NewFrame
  326.     except:
  327.       print "Error Creating frame of class",frame_class
  328.  
  329.  
  330.  
  331.  
  332.  
  333. class B_MenuTree(B_MenuFrameWidget):
  334.   def __init__(self,Parent,Menudesc,StackMenu,VertPos=0):
  335.     #print "MenuTree.__init__()"
  336.     #print "MenuTree initial refcount",sys.getrefcount(self)
  337.  
  338.     Width,Height=Raster.GetSize()
  339.     try:
  340.       Width,Height=Menudesc["Size"]
  341.     except KeyError:
  342.       pass
  343.  
  344.     B_MenuFrameWidget.__init__(self,Parent,"MenuTree"+Menudesc["Name"],Width,Height,VertPos)
  345.  
  346.     self.Menudesc=Menudesc
  347.  
  348.     ValidIndex   = 0
  349.     isValidIndex = 0
  350.  
  351.     for i in Menudesc["ListDescr"]:
  352.       m_class=B_MenuItemTextNoFX
  353.       try:
  354.         m_class=i["Kind"]
  355.       except KeyError:
  356.         pass
  357.  
  358.       vsep=0
  359.       try:
  360.         vsep=i["VSep"]
  361.       except KeyError:
  362.         pass
  363.  
  364.       wSubMenu=m_class(self,i,StackMenu)
  365.       if not isValidIndex:
  366.         if wSubMenu.AcceptsFocus():
  367.           isValidIndex = 1
  368.         else:
  369.           ValidIndex = ValidIndex+1
  370.  
  371.       HPos=0.5
  372.       HIndicator=BUIx.B_FrameWidget.B_FR_HRelative
  373.       HAnchor=BUIx.B_FrameWidget.B_FR_HCenter
  374.       try:
  375.         PosDscr=i["Position"]
  376.         HPos=PosDscr[0]
  377.         HIndicator=PosDscr[1]
  378.         HAnchor=PosDscr[2]
  379.       except KeyError:
  380.         pass
  381.  
  382.       try:
  383.         PosDscr=i["PositionEx"]
  384.         HPos=PosDscr[0]
  385.         HIndicator=PosDscr[1]
  386.         HAnchor=PosDscr[2]
  387.       except KeyError:
  388.         B_MenuFrameWidget.AddMenuElement(self,wSubMenu,vsep,HPos,HIndicator,HAnchor)
  389.  
  390.     if Menudesc.has_key("iFocus"):
  391.         self.SetFocus_Idx(Menudesc["iFocus"])
  392.     else:
  393.         self.SetFocus_Idx(ValidIndex)
  394.     #print "MenuTree refcount (widgets added)",sys.getrefcount(self)
  395.  
  396.  
  397.   def __del__(self):
  398.     #print "B_MenuTree.__del__()"
  399.     B_MenuFrameWidget.__del__(self)
  400.  
  401.   def __str__(self):
  402.     print "B_MenuTree widget with Frame",self.Name()
  403.  
  404.  
  405.  
  406. class B_MenuSpin(SpinWidget.B_SpinWidget,B_MenuTreeItem):
  407.   def __init__(self,Parent,MenuDescr,StackMenu,font_server=ScorerWidgets.font_server):
  408.     w=220
  409.     h=19
  410.     try:
  411.       w,h=MenuDescr["Size"]
  412.     except KeyError:
  413.       pass
  414.  
  415.     font="..\\..\\Data\\Letras menu med.bmp"
  416.     try:
  417.       font=MenuDescr["Font"]
  418.     except KeyError:
  419.       pass
  420.  
  421.     SpinWidget.B_SpinWidget.__init__(self,Parent,MenuDescr["Name"],w,h,font_server,font)
  422.     B_MenuTreeItem.__init__(self,MenuDescr,StackMenu)
  423.  
  424.     try:
  425.       val_func=MenuDescr["SpinGetValue"]
  426.       val=val_func()
  427.       SpinWidget.B_SpinWidget.SetValue(self,val)
  428.     except KeyError:
  429.       pass
  430.  
  431.     try:
  432.       l,u,s=MenuDescr["SpinValues"]
  433.       SpinWidget.B_SpinWidget.SetLimits(self,l,u)
  434.       SpinWidget.B_SpinWidget.SetSteps(self,s)
  435.     except KeyError:
  436.       pass
  437.  
  438.     try:
  439.       self.SetValueEnd=MenuDescr["SpinSetValueEnd"]
  440.     except KeyError:
  441.       self.SetValueEnd=None
  442.  
  443.     if MenuDescr.has_key("SpinOnChange"):
  444.         self.SpinOnChange = MenuDescr["SpinOnChange"]
  445.     else:
  446.         self.SpinOnChange = None
  447.  
  448.  
  449.  
  450.   def IncMenuItem(self):
  451.     self.IncrementValue()
  452.     if self.SpinOnChange:
  453.        self.SpinOnChange(self.GetValue())
  454.  
  455.  
  456.   def DecMenuItem(self):
  457.     self.DecrementValue()
  458.     if self.SpinOnChange:
  459.        self.SpinOnChange(self.GetValue())
  460.  
  461.  
  462.   def FinalRelease(self):
  463.     if self.SetValueEnd is not None:
  464.       self.SetValueEnd(self.GetValue())
  465.  
  466.  
  467.  
  468. class B_MenuItemTextNoFX(BUIx.B_TextWidget,B_MenuTreeItem):
  469.   def __init__(self,Parent,MenuDescr,StackMenu,
  470.                font_server=ScorerWidgets.font_server):
  471.     #print "B_MenuItemText.__init__()",MenuDescr["Name"]
  472.     font="..\\..\\Data\\Letras menu med.bmp"
  473.     try:
  474.       font=MenuDescr["Font"]
  475.     except KeyError:
  476.       pass
  477.  
  478.     BUIx.B_TextWidget.__init__(self,Parent,"SubMenu"+MenuDescr["Name"],MenuDescr["Name"],font_server,font)
  479.     B_MenuTreeItem.__init__(self,MenuDescr,StackMenu)
  480.     self.SetDrawFunc(self.Draw)
  481.     self.SetAlpha(1.0)
  482.     self.thisown=1
  483.  
  484.  
  485.  
  486.   def __del__(self):
  487.     #print "B_MenuItemText.__del__()",self.Name()
  488.     pass
  489.  
  490.   def __str__(self):
  491.     print "B_MenuItemTextNoFX widget with text",self.GetTextData()
  492.  
  493.  
  494.   def Draw(self,x,y,time):
  495.     if self.GetVisible()==0:
  496.       return
  497.  
  498.     #print "MenuItemText",self.Name()
  499.     foc=self.GetHasFocus()
  500.     if foc:
  501.       self.SetColor(252,247,167)
  502.     else:
  503.       self.SetColor(207,144,49)
  504.  
  505.     self.DefDraw(x,y,time)
  506.  
  507.  
  508.  
  509.  
  510. class B_MenuItemTextNoFXNoFocus(BUIx.B_TextWidget,B_MenuTreeItem):
  511.   def __init__(self,Parent,MenuDescr,StackMenu,
  512.                font_server=ScorerWidgets.font_server):
  513.     #print "B_MenuItemText.__init__()",MenuDescr["Name"]
  514.     font="..\\..\\Data\\Letras menu med.bmp"
  515.     try:
  516.       font=MenuDescr["Font"]
  517.     except KeyError:
  518.       pass
  519.  
  520.     BUIx.B_TextWidget.__init__(self,Parent,"SubMenu"+MenuDescr["Name"],MenuDescr["Name"],font_server,font)
  521.     B_MenuTreeItem.__init__(self,MenuDescr,StackMenu)
  522.     self.SetDrawFunc(self.Draw)
  523.     self.SetAlpha(1.0)
  524.     self.thisown=1
  525.  
  526.   def __del__(self):
  527.     #print "B_MenuItemText.__del__()",self.Name()
  528.     pass
  529.  
  530.   def __str__(self):
  531.     print "B_MenuItemTextNoFX widget with text",self.GetTextData()
  532.  
  533.  
  534.   def Draw(self,x,y,time):
  535.     if self.GetVisible()==0:
  536.       return
  537.  
  538.     #print "MenuItemText",self.Name()
  539.     foc=self.GetHasFocus()
  540.     if foc:
  541.       self.SetColor(252,247,167)
  542.     else:
  543.       self.SetColor(207,144,49)
  544.     self.SetAlpha(0.4)
  545.     self.DefDraw(x,y,time)
  546.     self.SetAlpha(1.0)
  547.   def AcceptsFocus(self):
  548.     return 0
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557. class B_MenuItemText(TextFXWidget.B_TextFXWidget,B_MenuTreeItem):
  558.   def __init__(self,Parent,MenuDescr,StackMenu,font_server=ScorerWidgets.font_server):
  559.     #print "B_MenuItemText.__init__()",MenuDescr["Name"]
  560.     font="..\\..\\Data\\Letras menu med.bmp"
  561.     try:
  562.       font=MenuDescr["Font"]
  563.     except KeyError:
  564.       pass
  565.  
  566.     TextFXWidget.B_TextFXWidget.__init__(self,Parent,"SubMenu"+MenuDescr["Name"],MenuDescr["Name"],font_server,font)
  567.     B_MenuTreeItem.__init__(self,MenuDescr,StackMenu)
  568.  
  569.  
  570.   def __del__(self):
  571. ##    print "B_MenuItemText.__del__()",self.Name()
  572.     TextFXWidget.B_TextFXWidget.__del__(self)
  573.     B_MenuTreeItem.__del__(self)
  574.  
  575.   def __str__(self):
  576.     print "B_MenuItemText widget with text",self.GetTextData()
  577.  
  578.  
  579. #if Bladex.GetMapType() > 0:
  580. #  class B_VariableFocusTextMenuItem(B_MenuItemText):
  581. #    def AcceptsFocus(self):
  582. #      return 0
  583. #else:
  584. #  class B_VariableFocusTextMenuItem(B_MenuItemText):
  585. #    def __str__(self):
  586. #      print "B_MenuItemText widget with text",self.GetTextData()
  587.  
  588.  
  589.  
  590. class B_MenuItemTextNoFocus(B_MenuItemText):
  591.   def AcceptsFocus(self):
  592.     return 0
  593.  
  594.  
  595.  
  596.  
  597. class B_MenuItemOption(B_MenuItemTextNoFX):
  598.   def __init__(self,Parent,MenuDescr,StackMenu,
  599.                font_server=ScorerWidgets.font_server):
  600.  
  601.     self.Options=["No option defined.",]
  602.     self.SelOption=0
  603.     self.OptionText=MenuDescr["Name"]
  604.  
  605.     try:
  606.       self.Options=MenuDescr["Options"]
  607.     except KeyError:
  608.       pass
  609.  
  610.     try:
  611.       GetSelFunc=MenuDescr["SelOptionFunc"]
  612.       OptionSel=GetSelFunc()
  613.       #print "DM OptionSel",self.OptionText,OptionSel,self.Options
  614.       self.SelOption=OptionSel
  615.       print self.SelOption
  616.     except KeyError:
  617.       pass
  618.  
  619.     B_MenuItemTextNoFX.__init__(self,Parent,MenuDescr,StackMenu)
  620.     #self.SetDrawFunc(self.Draw)
  621.     self.Parent=Parent
  622.  
  623.     OptionText=self.OptionText+"    "+str(self.Options[self.SelOption])
  624.     self.SetText(OptionText)
  625.  
  626.  
  627.   def __del__(self):
  628.     pass
  629.     #print "B_MenuItemOption.__del__()",self.Name()
  630.  
  631. ##  def Draw(self,x,y,time):
  632. ##    if self.GetVisible()==0:
  633. ##      return
  634. ##    foc=self.GetHasFocus()
  635. ##    if foc:
  636. ##      self.SetColor(240,240,240)
  637. ##    else:
  638. ##      self.SetColor(240,10,10)
  639. ##
  640. ##    self.DefDraw(x,y,time)
  641.  
  642.   def ActivateItem(self,activate):
  643.     check_pass = None
  644.     val = 1
  645.     if self.MenuDescr.has_key("CheckPass"):
  646.       check_pass=self.MenuDescr["CheckPass"]
  647.       val = check_pass()
  648.  
  649.     if ((activate==1) and (val==1)):
  650.       self.SelOption=self.SelOption+1
  651.       self.SelOption=self.SelOption% len(self.Options)
  652.       OptionText=self.OptionText+"    "+self.Options[self.SelOption]
  653.       self.SetText(OptionText)
  654.  
  655.       try: # Puede que Parent no herede de Frame
  656.         self.Parent.RecalcLayout()
  657.       except:
  658.         pass
  659.  
  660.       try:
  661.         command=self.MenuDescr["Command"]
  662.         command(MenuText.GetInverseMenuText(self.Options[self.SelOption]))
  663.       except KeyError:
  664.         pass
  665.     elif activate==0:
  666.       self.StackMenu.Pop()
  667.  
  668.   def FinalRelease(self):
  669.     print "B_MenuItemOption.FinalRelease()"
  670.     self.Parent=None
  671.     #self.SetDrawFunc(None)
  672.  
  673.   def IncMenuItem(self):
  674.     self.ActivateItem(1)
  675.  
  676.  
  677.   def DecMenuItem(self):
  678.     check_pass = None
  679.     val = 1
  680.     if self.MenuDescr.has_key("CheckPass"):
  681.       check_pass=self.MenuDescr["CheckPass"]
  682.       val = check_pass()
  683.  
  684.     if (val==1):
  685.       self.SelOption=self.SelOption+len(self.Options)-1
  686.       self.SelOption=self.SelOption% len(self.Options)
  687.       OptionText=self.OptionText+"    "+self.Options[self.SelOption]
  688.       self.SetText(OptionText)
  689.  
  690.       try: # Puede que Parent no herede de Frame
  691.         self.Parent.RecalcLayout()
  692.       except:
  693.         pass
  694.  
  695.       try:
  696.         command=self.MenuDescr["Command"]
  697.         command(MenuText.GetInverseMenuText(self.Options[self.SelOption]))
  698.       except KeyError:
  699.         pass
  700.  
  701.  
  702. class B_MenuItemPage(B_MenuFrameWidget):
  703.   def __init__(self,Parent,PageDscr,MenuDescr,StackMenu):
  704.     #print "Creating B_MenuItemPage()"
  705.     #IDebug.set_trace()
  706.     #Bldb.set_trace()
  707.     #pdb.set_trace()
  708.     self.TitleText=PageDscr["Title"]  #Tienen que tener tφtulo
  709.     B_MenuFrameWidget.__init__(self,Parent,"MenuItemPage "+self.TitleText)
  710.     #B_MenuTreeItem.__init__(self,MenuDescr,StackMenu)
  711.     font="..\\..\\Data\\Letras menu peq.bmp" # Provisional
  712.     font_server=ScorerWidgets.font_server    # Provisional
  713.  
  714.     self.BackgroundImage=None
  715.     try:
  716.       self.BackgroundImage=PageDscr["Background"]
  717.     except KeyError:
  718.       pass
  719.  
  720.     self.PrevLabel="Prev"
  721.     try:
  722.       self.PrevLabel=PageDscr["PrevLabel"]
  723.     except KeyError:
  724.       pass
  725.  
  726.     self.Title=BUIx.B_TextWidget(self,"Title MenuItemPage "+self.TitleText,self.TitleText,font_server,"..\\..\\Data\\Letras menu gra.bmp")
  727.     self.Title.SetAlpha(0.8)
  728.     self.Title.SetColor(252,247,167)
  729.     self.AddWidget(self.Title,10,10,
  730.                    BUIx.B_FrameWidget.B_FR_AbsoluteRight,BUIx.B_FrameWidget.B_FR_Right,
  731.                    BUIx.B_FrameWidget.B_FR_AbsoluteTop,BUIx.B_FrameWidget.B_FR_Top)
  732.  
  733.  
  734.     # Truco, cada PageDscr puede tener un font, pero los B_MenuItemText lo leen de MenuDescr
  735.     try:
  736.       font=PageDscr["Font"]
  737.       MenuDescr["Font"]=font
  738.     except KeyError:
  739.       pass
  740.  
  741.     self.PrevItem=B_MenuItemText(self,self.TitleText+self.PrevLabel,self.PrevLabel,None,StackMenu)
  742.     self.PrevItem.SetAlpha(1.0)
  743.     self.PrevItem.SetColor(252,247,167)
  744.     B_MenuFocusManager.AddMenuElement(self,self.PrevItem)
  745.     self.AddWidget(self.PrevItem,10,10,
  746.                    BUIx.B_FrameWidget.B_FR_AbsoluteLeft,BUIx.B_FrameWidget.B_FR_Left,
  747.                    BUIx.B_FrameWidget.B_FR_AbsoluteBottom,BUIx.B_FrameWidget.B_FR_Bottom)
  748.  
  749.  
  750.     self.NextLabel="Next"
  751.     try:
  752.       self.NextLabel=PageDscr["NextLabel"]
  753.     except KeyError:
  754.       pass
  755.  
  756.     self.NextItem=B_MenuItemText(self,self.TitleText+self.NextLabel,self.NextLabel,None,StackMenu)
  757.     self.NextItem.SetAlpha(1.0)
  758.     self.NextItem.SetColor(252,247,167)
  759.     B_MenuFocusManager.AddMenuElement(self,self.NextItem)
  760.     self.AddWidget(self.NextItem,10,10,
  761.                    BUIx.B_FrameWidget.B_FR_AbsoluteRight,BUIx.B_FrameWidget.B_FR_Right,
  762.                    BUIx.B_FrameWidget.B_FR_AbsoluteBottom,BUIx.B_FrameWidget.B_FR_Bottom)
  763.  
  764.  
  765.     self.ContinueItem=B_MenuItemText(self,self.TitleText+" Continue","Continue",None,StackMenu)
  766.     self.ContinueItem.SetAlpha(1.0)
  767.     self.ContinueItem.SetColor(252,247,167)
  768.     B_MenuFocusManager.AddMenuElement(self,self.ContinueItem)
  769.     self.AddWidget(self.ContinueItem,0.4,10,
  770.                    BUIx.B_FrameWidget.B_FR_HRelative,BUIx.B_FrameWidget.B_FR_Left,
  771.                    BUIx.B_FrameWidget.B_FR_AbsoluteBottom,BUIx.B_FrameWidget.B_FR_Bottom)
  772.  
  773.     self.BackItem=B_MenuItemText(self,self.TitleText+" Back","Back",None,StackMenu)
  774.     self.BackItem.SetAlpha(0.5)
  775.     self.BackItem.SetColor(252,247,167)
  776.     B_MenuFocusManager.AddMenuElement(self,self.BackItem)
  777.     self.AddWidget(self.BackItem,0.4,10,
  778.                    BUIx.B_FrameWidget.B_FR_HRelative,BUIx.B_FrameWidget.B_FR_Right,
  779.                    BUIx.B_FrameWidget.B_FR_AbsoluteBottom,BUIx.B_FrameWidget.B_FR_Bottom)
  780.  
  781.     #self.SetDrawFunc(self.Draw)
  782.     self.Description="No Description"
  783.     try:
  784.       self.Description=PageDscr["Description"]
  785.     except KeyError:
  786.       pass
  787.  
  788.     self.DescriptionItem=B_MenuItemTextNoFocus(self,self.TitleText+" Description",self.Description,None,StackMenu)
  789.     B_MenuFocusManager.AddMenuElement(self,self.DescriptionItem)
  790.     self.DescriptionItem.SetAlpha(1.0)
  791.     self.DescriptionItem.SetColor(252,247,167)
  792.     self.AddWidget(self.DescriptionItem,25,0.7,
  793.                    BUIx.B_FrameWidget.B_FR_AbsoluteRight,BUIx.B_FrameWidget.B_FR_Right,
  794.                    BUIx.B_FrameWidget.B_FR_VRelative,BUIx.B_FrameWidget.B_FR_VCenter)
  795.  
  796.  
  797.     try:
  798.       BackgroundImage=PageDscr["BackGround"]
  799.       self.BackgroundItem=WidgetsExtra.B_ImageWidget(self,self.TitleText+" Background",BackgroundImage)
  800.       self.AddWidget(self.BackgroundItem,0.5,0.5,
  801.                    BUIx.B_FrameWidget.B_FR_HRelative,BUIx.B_FrameWidget.B_FR_HCenter,
  802.                    BUIx.B_FrameWidget.B_FR_VRelative,BUIx.B_FrameWidget.B_FR_VCenter)
  803.     except KeyError:
  804.       pass
  805.  
  806.     B_MenuFocusManager.SetFocus(self,self.ContinueItem)
  807.  
  808.  
  809.   def __del__(self):
  810.     #print "Destroying ",self
  811.     pass
  812.  
  813.   def __str__(self):
  814.     print "B_MenuItemPage",self.TitleText
  815.  
  816.  
  817.   def SetVisible(self,v):
  818.     B_MenuFrameWidget.SetVisible(self,v)
  819.  
  820.  
  821. #  def Draw(self,x,y,time):
  822. #    if self.GetVisible()==0:
  823. #      return
  824. #    foc=self.GetHasFocus()
  825. #    if foc:
  826. #      self.SetColor(240,240,240)
  827. #    else:
  828. #      self.SetColor(240,10,10)
  829. #
  830. #    self.DefDraw(x,y,time)
  831.  
  832.  
  833.  
  834.  
  835. class B_MenuItemPages(BUIx.B_TextWidget,B_MenuTreeItem):
  836.   def __init__(self,Parent,MenuDescr,StackMenu):
  837.     font="..\\..\\Data\\Letras menu med.bmp" # Provisional
  838.     font_server=ScorerWidgets.font_server    # Provisional
  839.     BUIx.B_TextWidget.__init__(self,Parent,"B_MenuItemPages","B_MenuItemPages Text",font_server,font)
  840.     B_MenuTreeItem.__init__(self,MenuDescr,StackMenu)
  841.     self.Pages=[]
  842.     self.ActivePage=None
  843.     self.SetDrawFunc(self.Draw)
  844.     self.SetSizeChangedFunc(self.SizeChanged)
  845.     PageDscrs=MenuDescr["PageDscrs"]
  846.     for i in PageDscrs:
  847.       self.AddPage(Parent,i,MenuDescr,StackMenu)
  848.     self.SetActivePage(self.Pages[0])
  849.     self.thisown=1
  850.  
  851.   def __del__(self):
  852.     print "Deleting",self
  853.     #del(self.Pages)
  854.  
  855.  
  856.   def AddPage(self,Parent,pagedscr,MenuDescr,StackMenu):
  857.     page=B_MenuItemPage(Parent,640,480,pagedscr,MenuDescr,StackMenu)
  858.     self.Pages.append(page)
  859.  
  860.  
  861.   def SetActivePage(self,page):
  862.     if self.ActivePage:
  863.       self.ActivePage.SetVisible(0)
  864.     self.ActivePage=page
  865.     if self.ActivePage:
  866.       self.ActivePage.SetVisible(1)
  867.       Bladex.SetRootWidget(self.ActivePage.GetPointer())
  868.  
  869.   def NextPageAux(self,desp):
  870.     old_page=self.ActivePage
  871.     index=self.Pages.index(old_page)
  872.     index=index+desp
  873.     index=index%len(self.Pages)
  874.     self.SetActivePage(self.Pages[index])
  875.  
  876.   def NextPage(self):
  877.     self.NextPageAux(1)
  878.  
  879.   def PrevPage(self):
  880.     self.NextPageAux(-1)
  881.  
  882.  
  883.   def GetPointer(self):
  884.     if self.ActivePage:
  885.       return self.ActivePage.GetPointer()
  886.     else:
  887.       return self.GetPointer()
  888.  
  889.  
  890.   def AcceptsFocus(self):
  891.     return 0
  892.  
  893.   def GetFocus(self):
  894.     return self
  895.  
  896.   def NextFocus(self):
  897.     if self.ActivePage:
  898.       self.ActivePage.NextFocus()
  899.     else:
  900.       pass
  901.  
  902.   def PrevFocus(self):
  903.     if self.ActivePage:
  904.       self.ActivePage.PrevFocus()
  905.     else:
  906.       pass
  907.  
  908.  
  909.   def ActivateItem(self,act):
  910.     #print "B_MenuItemPages.ActivateItem()"
  911.     if act and self.ActivePage:
  912.       wTemp=self.ActivePage.GetFocus()
  913.       #pdb.set_trace()
  914.       if not wTemp.ActivateItem(1):
  915.         if self.ActivePage.GetFocus()==self.ActivePage.PrevItem:
  916.           self.PrevPage()
  917.         elif self.ActivePage.GetFocus()==self.ActivePage.NextItem:
  918.           self.NextPage()
  919.     else:
  920.       self.SetActivePage(None)
  921.       B_MenuTreeItem.ActivateItem(self,act)
  922.  
  923.  
  924.   def __str__(self):
  925.     print "class B_MenuItemPages with",len(self.Pages),"pages"
  926.  
  927.  
  928.   def Draw(self,x,y,time):
  929.     if self.ActivePage:
  930.       self.ActivePage.Draw(x,y,time)
  931.     else:
  932.       self.SetColor(100,100,240)
  933.       self.SetAlpha(0.5)
  934.       BUIx.B_TextWidget.DefDraw(self,100,100,time)
  935.  
  936.  
  937.   def SizeChanged(self,reshz,resvt):
  938.     for i in self.Pages:
  939.       i.SizeChanged(reshz,resvt)
  940.  
  941.   def CreateFrame(self):
  942.     return None
  943.  
  944.  
  945.  
  946.  
  947. class B_BackImageWidget(BUIx.B_RectWidget):
  948.  
  949.     def __init__(self,Parent,MenuDescr,StackMenu):
  950.         self.Bitmap  = BBLib.B_BitMap24()
  951.         self.Bitmap.ReadFromFile("..\\..\\Data\\menu.jpg")
  952.         self.vidw = 1
  953.         self.vidh = 1
  954.         BUIx.B_RectWidget.__init__(self,Parent,MenuDescr["Name"],self.vidw,self.vidh)
  955.         self.Selected=0
  956.         self.Solid=0
  957.         self.Border=0
  958.         self.SetDrawFunc(self.Draw)
  959.  
  960.     def Draw(self,x,y,time):
  961.         Raster.SetPosition(0,0)
  962.         Raster.DrawImage(640,480,"BGR","Stretch",self.Bitmap.GetData())
  963.         self.DefDraw(x,y,time)
  964.  
  965.     def FinalRelease(self):
  966.         BUIx.B_RectWidget.FinalRelease(self)
  967.  
  968.     def AcceptsFocus(self):
  969.         return 0
  970.  
  971. class B_BackBlank(BUIx.B_RectWidget):
  972.  
  973.     def __init__(self,Parent,MenuDescr,StackMenu):
  974.         self.Bitmap  = BBLib.B_BitMap24()
  975.         self.Bitmap.ReadFromFile("..\\..\\Data\\Black.jpg")
  976.         self.vidw = 1
  977.         self.vidh = 1
  978.         BUIx.B_RectWidget.__init__(self,Parent,MenuDescr["Name"],self.vidw,self.vidh)
  979.         self.Selected=0
  980.         self.Solid=0
  981.         self.Border=0
  982.         self.SetDrawFunc(self.Draw)
  983.  
  984.     def Draw(self,x,y,time):
  985.         Raster.SetPosition(0,0)
  986.         Raster.DrawImage(640,480,"BGR","Stretch",self.Bitmap.GetData())
  987.         self.DefDraw(x,y,time)
  988.  
  989.     def FinalRelease(self):
  990.         BUIx.B_RectWidget.FinalRelease(self)
  991.  
  992.     def AcceptsFocus(self):
  993.         return 0
  994.  
  995.  
  996. class B_BackWeapon(BUIx.B_RectWidget):
  997.  
  998.     #def __init__(self,Parent,MenuDescr,StackMenu):
  999.     def __init__(self,Parent,Menudesc,StackMenu,VertPos=0):
  1000.         import Language
  1001.         
  1002.         char = Bladex.GetEntity("Player1")
  1003.         print char.Kind
  1004.  
  1005.         self.Specials  = BBLib.B_BitMap24()
  1006.         self.Specials.ReadFromFile("..\\..\\Data\\TB\\" + Language.Current + "\\" + char.Kind + "\\plantillaspecials.jpg")
  1007.  
  1008.         self.Items  = BBLib.B_BitMap24()
  1009.         self.Items.ReadFromFile("..\\..\\Data\\TB\\" + Language.Current +"\\Items\\plantillaGitems.jpg")
  1010.  
  1011.         self.Weapons  = BBLib.B_BitMap24()
  1012.         self.Weapons.ReadFromFile("..\\..\\Data\\TB\\" + Language.Current + "\\" + char.Kind + "\\plantillaweapons.jpg")
  1013.  
  1014.         self.Habilities  = BBLib.B_BitMap24()
  1015.         self.Habilities.ReadFromFile("..\\..\\Data\\TB\\" + Language.Current + "\\" + char.Kind + "\\plantillahabilities.jpg")
  1016.  
  1017.         self.MapText  = BBLib.B_BitMap24()
  1018.         self.MapText.ReadFromFile("..\\..\\Data\\TB\\" + Language.Current + "\\" + char.Kind + "\\" + Bladex.GetCurrentMap() + ".jpg")
  1019.         if (self.MapText.GetData() == 0):
  1020.             self.MapText.ReadFromFile("..\\..\\Data\\TB\\" + Language.Current + "\\"  + Bladex.GetCurrentMap() + ".jpg")
  1021.         self.Text1 = BBLib.B_BitMap24()
  1022.         self.Text1.ReadFromFile("..\\..\\Data\\TB\\" + Language.Current  + "\\muralorc.jpg")
  1023.         self.Text2 = BBLib.B_BitMap24()
  1024.         self.Text2.ReadFromFile("..\\..\\Data\\TB\\" + Language.Current  + "\\muralisla1.jpg")
  1025.         self.Text3 = BBLib.B_BitMap24()
  1026.         self.Text3.ReadFromFile("..\\..\\Data\\TB\\" + Language.Current  + "\\muralnejev.jpg")
  1027.  
  1028.         self.Tablets  = BBLib.B_BitMap24()
  1029.         self.Tablets.ReadFromFile("..\\..\\Data\\TB\\"+ Language.Current  + "\\tablillas.jpg")
  1030.  
  1031.         self.image = 1
  1032.         self.NumImages = 6
  1033.  
  1034.         self.Text = 0
  1035.         self.NumTexts = 4
  1036.  
  1037.         self.TextsAvail = [1, 0, 0, 0]
  1038.  
  1039.         self.vidw = 1
  1040.         self.vidh = 1
  1041.  
  1042.         BUIx.B_RectWidget.__init__(self,Parent,Menudesc["Name"],self.vidw,self.vidh)
  1043.  
  1044.         self.Selected=0
  1045.         self.Solid=0
  1046.         self.Border=0
  1047.         self.SetDrawFunc(self.Draw)
  1048.  
  1049.         self.SndCorreGema=Bladex.CreateSound("..\\..\\Sounds\\golpe-2.wav","Chanje")
  1050.         self.SndCorreGema.Volume=0.5
  1051.         self.SndCorreGema.MinDistance=1000000.0
  1052.         self.SndCorreGema.MaxDistance=2000000
  1053.  
  1054.  
  1055.     def Draw(self,x,y,time):
  1056.         import string
  1057.         import GotoMapVars
  1058.         import Menu
  1059.  
  1060.         x,y = Raster.GetSize()
  1061.         Raster.SetPosition((x - 640)/2, (y - 480)/2)
  1062.  
  1063.         if    "ORCMURAL" in GotoMapVars.BaList:
  1064.             self.TextsAvail[1] = 1
  1065.         if "ISLANDMURAL" in GotoMapVars.BaList:
  1066.             self.TextsAvail[2] = 1
  1067.         if  "NEJEVMURAL" in GotoMapVars.BaList:
  1068.             self.TextsAvail[3] = 1
  1069.  
  1070.         # Range Vars
  1071.         # TODO: Can be taken to the constrcutor for initialization speed
  1072.         Inventory = Bladex.GetEntity("Player1").GetInventory()
  1073.         addone = 0
  1074.         if (not Inventory.nTablets > 0) and not (1 in GotoMapVars.PlacedTablets):
  1075.             addone = 1
  1076.         if  "SALATABLILLAS" in GotoMapVars.BaList:
  1077.             addone = 0
  1078.  
  1079.  
  1080.         Map = string.lower(Bladex.GetCurrentMap())
  1081.  
  1082.         Specials = 1
  1083.  
  1084.         if Map in GotoMapVars.BackLevelNames:
  1085.             Specials = 0
  1086.         else:
  1087.             if GotoMapVars.LevelNames.index(Map) > 6:
  1088.                 Specials = 0
  1089.  
  1090.         # Horizontal buttons range checking
  1091.         if self.image < Specials:
  1092.             self.image = (self.NumImages - (1 + addone))
  1093.  
  1094.         if self.image > (self.NumImages - (1 + addone)):
  1095.             self.image = Specials
  1096.  
  1097.         # Vertical -Text- options range checking
  1098.         if self.Text < 0:
  1099.             self.Text = self.NumTexts - 1
  1100.  
  1101.         if self.Text > self.NumTexts - 1:
  1102.             self.Text = 0
  1103.  
  1104.         # Set logic conditions
  1105.         if self.image == 0:
  1106.             Raster.DrawImage(640,480,"BGR","Stretch",self.Specials.GetData())
  1107.         if self.image == 1:
  1108.             Raster.DrawImage(640,480,"BGR","Stretch",self.Weapons.GetData())
  1109.         if self.image == 2:
  1110.             Raster.DrawImage(640,480,"BGR","Stretch",self.Habilities.GetData())
  1111.         if self.image == 3:
  1112.             Raster.DrawImage(640,480,"BGR","Stretch",self.Items.GetData())
  1113.         if self.image == 4:
  1114.             if self.Text == 0:
  1115.                 Raster.DrawImage(640,480,"BGR","Stretch",self.MapText.GetData())
  1116.             if self.Text == 1:
  1117.                 Raster.DrawImage(640,480,"BGR","Stretch",self.Text1.GetData())
  1118.             if self.Text == 2:
  1119.                 Raster.DrawImage(640,480,"BGR","Stretch",self.Text2.GetData())
  1120.             if self.Text == 3:
  1121.                 Raster.DrawImage(640,480,"BGR","Stretch",self.Text3.GetData())
  1122.         if self.image == 5:
  1123.                 Raster.DrawImage(640,480,"BGR","Stretch",self.Tablets.GetData())
  1124.  
  1125.         if  ((self.image == 4) and
  1126.             (
  1127.                 (self.TextsAvail[1]) or
  1128.                 (self.TextsAvail[2]) or
  1129.                 (self.TextsAvail[3])
  1130.             )):
  1131.             Menu.TBUDSoundAble = 1
  1132.         else:
  1133.             Menu.TBUDSoundAble = 0
  1134.         self.DefDraw(x,y,time)
  1135.  
  1136.     def FinalRelease(self):
  1137.         BUIx.B_RectWidget.FinalRelease(self)
  1138.  
  1139.     def AcceptsFocus(self):
  1140.         return 1
  1141.  
  1142.     def IncMenuItem(self):
  1143.         self.SndCorreGema.PlayStereo()
  1144.         self.image = self.image + 1
  1145.  
  1146.     def DecMenuItem(self):
  1147.         self.SndCorreGema.PlayStereo()
  1148.         self.image = self.image - 1
  1149.  
  1150.     def GetFocus(self):
  1151.         return self
  1152.  
  1153.     def ActivateItem(self,activate):
  1154.         import Menu
  1155.         Menu.ActivateMenu()
  1156.         return
  1157.  
  1158.     def NextFocus(self):
  1159.         if self.image == 4:
  1160.             self.Text = self.Text + 1
  1161.             while not self.TextsAvail[self.Text]:
  1162.                 self.Text = self.Text + 1
  1163.                 if self.Text > self.NumTexts - 1:
  1164.                     self.Text = 0
  1165.  
  1166.     def PrevFocus(self):
  1167.         if self.image == 4:
  1168.             self.Text = self.Text - 1
  1169.             while not self.TextsAvail[self.Text]:
  1170.                 self.Text = self.Text - 1
  1171.                 if self.Text < 0:
  1172.                     self.Text = self.NumTexts - 1
  1173.  
  1174.     def __del__(self):
  1175.         Menu.TBUDSoundAble = 1
  1176.  
  1177. class B_BackFeatures(BUIx.B_RectWidget):
  1178.  
  1179.     def __init__(self,Parent,MenuDescr,StackMenu):
  1180.         self.Bitmap1  = BBLib.B_BitMap24()
  1181.         self.Bitmap1.ReadFromFile("..\\..\\Data\\Blade_features1.jpg")
  1182.         self.Bitmap2  = BBLib.B_BitMap24()
  1183.         self.Bitmap2.ReadFromFile("..\\..\\Data\\Blade_features2.jpg")
  1184.         self.CurrentBitmap = BBLib.B_BitMap24()
  1185.         self.CurrentBitmap = self.Bitmap1
  1186.         self.vidw = 1
  1187.         self.vidh = 1
  1188.         BUIx.B_RectWidget.__init__(self,Parent,MenuDescr["Name"],self.vidw,self.vidh)
  1189.         self.Selected=0
  1190.         self.Solid=0
  1191.         self.Border=0
  1192.         self.SetDrawFunc(self.Draw)
  1193.         self.Time2Exit=None
  1194.  
  1195.     def Draw(self,x,y,time):
  1196.         if self.Time2Exit==None:
  1197.             self.Time2Exit=time
  1198.         if time-self.Time2Exit>10.0:
  1199.             Bladex.Quit()
  1200.         elif time-self.Time2Exit>5.0:
  1201.             self.CurrentBitmap = self.Bitmap2
  1202.         Raster.SetPosition(0,0)
  1203.         Raster.DrawImage(640,480,"BGR","Stretch",self.CurrentBitmap.GetData())
  1204.         self.DefDraw(x,y,time)
  1205.  
  1206.     def FinalRelease(self):
  1207.         BUIx.B_RectWidget.FinalRelease(self)
  1208.  
  1209.     def AcceptsFocus(self):
  1210.         return 0
  1211.